/*********************
* Author:Dzlua
* QQ:505544956
* time:2016/08/10
*/
#include "Button.h"

#include <iostream>
using namespace std;
using namespace edui;

class Test : public Object
{
public:
    Test(){}
    ~Test(){}
    void onButtonClick(Button* btn)
    {
        btn->dump();
        cout << "Test : onButtonClick" << endl;
    }
    void onButtonClick1(Button* btn)
    {
        btn->dump();
        cout << "Test : onButtonClick1" << endl;
    }
    void onButtonClick2(Button* btn)
    {
        btn->dump();
        cout << "Test : onButtonClick2" << endl;
    }
//    -----------------
    void onButtonClick3()
    {
        cout << "Test : onButtonClick3 : 0" << endl;
    }
    void onButtonClick4(Button* btn, int i)
    {
        cout << "Test : onButtonClick4 : 2" << i << endl;
    }
    void onButtonClick5(Button* btn, int i, const char* str)
    {
        cout << "Test : onButtonClick5 : 3 : " << i << " " << str << endl;
    }
    
    void onButtonClick6(Button* btn, const char* str)
    {
        cout << "Test : onButtonClick6 : 2 : "<< str << endl;
    }
};

class Test1 : public Object
{
public:
    Test1(){}
    ~Test1(){}
    void onButtonClick(Button* btn)
    {
        btn->dump();
        cout << "Test1 : onButtonClick" << endl;
    }
    void onButtonClick1(Button* btn)
    {
        btn->dump();
        cout << "Test1 : onButtonClick1" << endl;
    }
    void onButtonClick2(Button* btn)
    {
        btn->dump();
        cout << "Test1 : onButtonClick2" << endl;
    }
    //    -----------------
    void onButtonClick3()
    {
        cout << "Test1 : onButtonClick3 : 0" << endl;
    }
    void onButtonClick4(Button* btn, int i)
    {
        cout << "Test1 : onButtonClick4 : 2" << i << endl;
    }
    void onButtonClick5(Button* btn, int i, const char* str)
    {
        cout << "Test1 : onButtonClick5 : 3 : " << i << " " << str << endl;
    }
    void onButtonClick6(Button* btn, const char* str)
    {
        cout << "Test1 : onButtonClick6 : 2 : "<< str << endl;
    }
};

int main()
{
    Test test,test11;
    Test1 test1,test22;
    Button btn;

    btn.click1.connect(&test, &Test::onButtonClick);
    btn.click1.connect(&test, &Test::onButtonClick);
    btn.click1.connect(&test, &Test::onButtonClick1);
    btn.click1.connect(&test, &Test::onButtonClick2);
    btn.click1.connect(&test, &Test::onButtonClick2);

    btn.click1.connect(&test1, &Test1::onButtonClick);
    btn.click1.connect(&test1, &Test1::onButtonClick);
    btn.click1.connect(&test1, &Test1::onButtonClick1);
    btn.click1.connect(&test1, &Test1::onButtonClick2);
    btn.click1.connect(&test1, &Test1::onButtonClick2);

    cout << "-----1------" << endl;
    btn.check();
    btn.click1.disconnect(&test, &Test::onButtonClick);
    cout << "------2-----" << endl;
    btn.check();
    btn.click1.disconnect(&test, &Test::onButtonClick2);
    cout << "-----3------" << endl;
    btn.check();
    btn.click1.disconnect(&test1, &Test1::onButtonClick);
    cout << "------4-----" << endl;
    btn.check();
    btn.click1.disconnect(&test1, &Test1::onButtonClick2);

    cout << "----5-------" << endl;
    btn.click1.disconnect(&test11);
    btn.check();
    btn.click1.disconnect(&test22);
    cout << "-----6------" << endl;
    btn.check();
    btn.click1.disconnect(&test);
    cout << "------6.6-----" << endl;
    btn.check();
    btn.click1.disconnect(&test1);
    cout << "----7-------" << endl;
    btn.check();

    btn.click1.connect(&test, &Test::onButtonClick);
    btn.click1.connect(&test, &Test::onButtonClick);
    btn.click1.connect(&test, &Test::onButtonClick1);
    btn.click1.connect(&test, &Test::onButtonClick2);
    btn.click1.connect(&test, &Test::onButtonClick2);

    btn.click1.connect(&test1, &Test1::onButtonClick);
    btn.click1.connect(&test1, &Test1::onButtonClick);
    btn.click1.connect(&test1, &Test1::onButtonClick1);
    btn.click1.connect(&test1, &Test1::onButtonClick2);
    btn.click1.connect(&test1, &Test1::onButtonClick2);
    cout << "------8-----" << endl;
    btn.check();
    btn.click1.disconnect();//auto disconnect
    cout << "-----disconnect------" << endl;
    btn.check();
    cout << "-----9-----" << endl;
    
    //---------------------------//
    btn.click.connect(&test, &Test::onButtonClick3);
    btn.click2.connect(&test, &Test::onButtonClick4);
    btn.click3.connect(&test, &Test::onButtonClick5);

    btn.check();
    cout << "------10-----" << endl;
    
    btn.click.connect(&test1, &Test1::onButtonClick3);
    btn.click2.connect(&test1, &Test1::onButtonClick4);
    btn.click3.connect(&test1, &Test1::onButtonClick5);

    btn.check();
    cout << "------11-----" << endl;
    btn.click.disconnect();
    btn.click2.disconnect();
    btn.click3.disconnect();
    btn.check();
    cout << "------12-----" << endl;
    btn.click4.connect(&test, &Test::onButtonClick6);
    btn.click4.connect(&test1, &Test1::onButtonClick6);
    btn.check();
    cout << "------13-----" << endl;
    btn.click4.disconnect();
    btn.check();
    
    return 0;
}